From 827fdf84c8a85cdb02f4446739073a8bbf0e518d Mon Sep 17 00:00:00 2001 From: Eh2406 Date: Wed, 7 Mar 2018 17:10:55 -0500 Subject: [PATCH] use `into_boxed_str` to shrink before we leek --- src/cargo/core/interning.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/cargo/core/interning.rs b/src/cargo/core/interning.rs index 16f9c1347..f8d028b34 100644 --- a/src/cargo/core/interning.rs +++ b/src/cargo/core/interning.rs @@ -4,11 +4,13 @@ use std::collections::HashSet; use std::slice; use std::str; use std::mem; +use std::cmp::Ordering; pub fn leek(s: String) -> &'static str { - let ptr = s.as_ptr(); - let len = s.len(); - mem::forget(s); + let boxed = s.into_boxed_str(); + let ptr = boxed.as_ptr(); + let len = boxed.len(); + mem::forget(boxed); unsafe { let slice = slice::from_raw_parts(ptr, len); str::from_utf8_unchecked(slice) @@ -49,3 +51,18 @@ impl fmt::Debug for InternedString { write!(f, "InternedString {{ {} }}", self.to_inner()) } } + +impl Ord for InternedString { + fn cmp(&self, other: &InternedString) -> Ordering { + self.to_inner().cmp(&other.to_inner()) + } +} + +impl PartialOrd for InternedString { + fn partial_cmp(&self, other: &InternedString) -> Option { + Some(self.cmp(other)) + } +} + +unsafe impl Send for InternedString {} +unsafe impl Sync for InternedString {} \ No newline at end of file -- 2.30.2